package dao;

import java.util.List;

import javax.persistence.criteria.JoinType;

import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Repository;

import domena.Lektor;
import domena.Uzytkownik;

@Repository
public class UzytkownikDAOImpl implements UzytkownikDAO {

	@Autowired
	private HibernateTemplate hibernateTemplate;

	@Override
	public void zapiszUzytkownika(Uzytkownik uzytkownik) {
		hibernateTemplate.save(uzytkownik);
	}
	
	@Override
	public void edytujUzytkownika(Uzytkownik uzytkownik){
		hibernateTemplate.update(uzytkownik);
	}
	
	@Override
	public void usunUzytkownika(long id){
		Uzytkownik uzytkownik = getId(id);
		
		if(uzytkownik!=null)
			hibernateTemplate.delete(uzytkownik);
	}
	
	@Override
	@SuppressWarnings("unchecked")
	public Uzytkownik getId(long id) {
		DetachedCriteria cr = DetachedCriteria.forClass(Uzytkownik.class).add(Restrictions.idEq(id));				
		List<Uzytkownik> list = hibernateTemplate.findByCriteria(cr);
		if(!list.isEmpty())
			return list.get(0);
		return null;
	}
	
	@Override
	@SuppressWarnings("unchecked")
	public List<Uzytkownik> listUzytkownik() {
		DetachedCriteria criteria = DetachedCriteria.forClass(Uzytkownik.class);			
		List<Uzytkownik> list = hibernateTemplate.findByCriteria(criteria);
		DetachedCriteria c =DetachedCriteria.forClass(Uzytkownik.class);
		c.createAlias("lektor", "lektor");
		c.add(Restrictions.eq("nazwisko", "abc"));
		List<Uzytkownik> l = hibernateTemplate.findByCriteria(c);
		System.out.println(l);
		//DetachedCriteria crite = crit.createCriteria("lektorzy",DetachedCriteria.LEFT_JOIN);
		//criteria.createAlias(Lektor.class,"lektor").add(Restrictions.eq(lektor.nazwisko, "lektor.nazwisko"));
		//criteria.createCriteria("Lektor").add(Restrictions.eq("nazwisko",lektor.nazwisko));
		//System.out.println(hibernateTemplate.findByCriteria(criteria));
		return list;
	}

}